package com.fulu.javabase.innerclass;

/**
 * 静态内部类测试外部类。
 * 如果用static来修饰一个内部类，那么就是静态内部类。这个内部类属于外部类本身，
 * 但是不属于外部类的任何对象。因此使用static修饰的内部类称为静态内部类。
 * 静态内部类有如下规则：
 *
 * 静态内部类不能访问外部类的实例成员，只能访问外部类的类成员。
 * 外部类可以使用静态内部类的类名作为调用者来访问静态内部类的类成员，
 * 也可以使用静态内部类对象访问其实例成员。
 * @author GrimMjx
 */
public class StaticInnerTest {
    private int x = 1;
    private static int y = 2;

    public void test(){
        System.out.println(new InnerClass().a);
        System.out.println(InnerClass.b);
    }

    static class InnerClass {
        private int a = 3;
        private static int b = 4;

        public void test(){
            //无法访问
//            System.out.println(x);
            System.out.println(y);
        }
    }

    public static void main(String[] args) {
        StaticInnerTest staticInnerTest = new StaticInnerTest();
        staticInnerTest.test();

        InnerClass innerClass = new InnerClass();
        innerClass.test();
    }
}